﻿#define _CRT_SECURE_NO_WARNINGS 1
// 原题连接：https://ac.nowcoder.com/acm/problem/230830
/*
题目描述：
链接：https://ac.nowcoder.com/acm/problem/230830
来源：牛客网

给定一个长度为偶数的环形 01 字符串。（环形指，第一个字符和最后一个字符是相邻的）
字符串初始每个字符都是白色。小葱想把一段连续区间染成红色，使得红色的字符'0'数量等于白色的字符'0'数量，红色的字符'1'数量等于白色的字符'1'数量。问有多少种不同的染色方法？
两个方案不同当且仅当存在一个某字符，在一个方案是染成红色，在另一个方案为白色。
输入描述:
第一行输入一个正整数
𝑛
n，代表字符串长度。
第二行输入一个长度为
𝑛
n 的 01 字符串（仅由字符'0'和字符'1'组成的字符串）
数据范围：
2
≤
𝑛
≤
300000
2≤n≤300000 。保证
𝑛
n 是偶数。
输出描述:
合法的染色方案数。
示例1
输入
复制
2
11
输出
复制
2
说明
将第一个数字染红为一个方案。
将第二个数字染红为一个方案。
示例2
输入
复制
4
0101
输出
复制
4
说明
任意一个长度为2的区间染红均合法。
示例3
输入
复制
4
1100
输出
复制
2
说明
可以将区间 [2,3] 染红，或者将第一个和最后一个字符染红（因为是个环，所以第一个和最后一个也是相邻区间）。
*/

#include <iostream>
using namespace std;
const int N = 3e5 + 10;
char s[N];
int n = 0;
int ret = 0;


int main() {
    scanf("%d", &n);
    scanf("%s", s);
    if (n % 2) {
        cout << 0 << endl;
        return 0;
    }
    int a = 0, b = 0;
    for (int i = 0; i < n; i++) {
        if (s[i] == '0') {
            a++;
        }
        else {
            b++;
        }
    }
    if (a % 2 && b % 2) {
        cout << 0 << endl;
        return 0;
    }
    int cura = 0, curb = 0;
    for (int left = 0, right = 0; right < n; right++) {
        if (s[right] == '0') {
            cura++;
        }
        else {
            curb++;
        }
        if (cura > a / 2 || curb > b / 2) {
            if (s[left] == '0') {
                cura--;
            }
            else {
                curb--;
            }
            left++;
        }
        if (right - left + 1 == n / 2 && cura == a / 2 && curb == b / 2) {
            ret += 2;
            if (right == n - 1) {
                // 如果right == n - 1的时候满足条件，则会重复计算，因为和最开头的情况一样
                ret -= 2;
            }
        }
    }
    cout << ret << endl;
    return 0;
}